#!/usr/bin/env python3

from datetime import datetime
import os.path
import time

import json

import config

from db_helper import DbHelper
from http_helper import HttpHelper

http = HttpHelper()
db = DbHelper()

total_count = 0


def fetch_users_by_pageNo(page_no):
    global total_count

    if 0 < total_count <= (page_no - 1) * config.page_size:
        print(f'当前页码{page_no}已超出总记录条数{total_count}，停止抓取')
        return []

    # if page_no > 1:
    #     print('测试，退出...')
    #     return []

    print('正在抓取第%d页数据......' % page_no)
    resp = http.fetch_club_members(page_no)
    total_count = resp['total']
    return resp['records']


def fetch_club_members():
    if not os.path.exists(config.output_dir):
        os.makedirs(config.output_dir)

    total = 0
    page_no = 1
    current_array = fetch_users_by_pageNo(page_no)
    total_users = current_array
    while len(current_array) > 0:
        page_no = page_no + 1
        time.sleep(5)
        current_array = fetch_users_by_pageNo(page_no)
        total_users = total_users + current_array

    # 保存前清除多余节点
    for row in total_users:
        for key in config.member_drop_keys:
            del row[key]

    date = datetime.now()
    filename = date.strftime('%Y%m%d')
    filepath = os.path.join(config.output_dir, filename + '.json')
    with open(filepath, 'w', encoding='utf-8') as f:
        json.dump(total_users, f, indent=2, ensure_ascii=False)

    db.update_members(config.club_id, total_users)

    print('数据已保存')


def query_finished_events():
    resp = http.fetch_club_finish_events(config.club_id, 20)
    for act in resp['records']:
        '''
        第一步，获取所有已完成的活动
        '''
        # print('%s status: %d, id=%d' % (act["activityTitle"], act["activityStatus"], act["id"]))
        if act['activityStatus'] != 0:
            continue

        # status是0的数据才是已完成
        exist_act = db.find_activity(act['id'])
        if exist_act is not None:
            # 已存在的活动不需要二次处理
            continue

        # 活动不存在，重新抓取活动数据
        groups = http.fetch_activity_group_list(act['id'])
        new_member_count = 0
        male_count = 0
        female_count = 0
        total_points = 0
        for group in groups:
            points_gain = 20
            if group['groupName'] is not None and ('三小时' in group['groupName'] or '3小时' in group['groupName']):
                points_gain = 30

            for member in group['memberList']:
                # 统计男女数量
                if member['sex'] == 0:
                    female_count = female_count + 1
                else:
                    male_count = male_count + 1

                # 统计俱乐部新人数量
                if member['isFirstJoin'] == 1:
                    new_member_count = new_member_count + 1

                # 积分发放
                if member['payType'] != 2 and member['payStatus'] == 1 and member['isHangPeople'] == 0:
                    # 支付类型2是管理员代报名，不收费，也不发放积分，这里只统计其他类型数据。并且挂人无积分
                    banker = '精灵'
                    if ('羽亦' in act['activityAddress'] or
                            '泰然' in act['activityAddress']
                            or '优嘉' in act['activityAddress']):
                        banker = '饭哥'
                    db.add_member_points(
                        act['clubId'],
                        member['clubMemberId'],
                        member['nickname'],
                        member['avatar'],
                        points_gain,
                        act['activityTitle'] + ' 获取活动积分',
                        banker,
                        '',
                        'System',
                        act['id'],
                        act['activityDate']
                    )
                    total_points = total_points + points_gain

        act['newMemberCount'] = new_member_count
        act['points'] = total_points
        act['maleCount'] = male_count
        act['femaleCount'] = female_count
        db.save_activity(act)
        db.commit()


def write_act_comments(act_id, comment):
    print(f'create comment form act:{act_id} and comment:{comment}')
    data = {
        "activityId": act_id,
        "clubId": None,
        "evaluateType": 1,
        "mainScore": 5,
        "serviceScore": 5,
        "environmentScore": 5,
        "experienceScore": 5,
        "content": comment,
        "pics": "https://oss.flashxsport.com/flashUpload/evaluate/6d450c070ee84ae2b14e6d73764015f5.png",
        "evaluateTarget": 0
    }
    http.create_comment(data)


comments = [
    '羽毛球场上的每一次跃起都像在触摸天空，球拍与羽毛球的碰撞声是最动人的节奏，这里让平凡的日子有了飞翔的质感。',
    '从菜鸟到高手，羽毛球见证了我的成长。汗水浸透的T恤、磨破的球鞋，都是热爱最好的勋章。',
    '周末约上三五好友杀两局，笑声和球速一起飙升。这种既能锻炼身体又能增进感情的活动，简直完美！',
    '羽毛球是成年人的快乐跳跳糖——短短一局就能释放压力，多巴胺随着扣杀暴增，下班后的最佳充电方式。',
    '专业教练的指导让我进步神速，原来反手挑球有这么多门道！系统训练后终于能和老爹打得有来有回了。',
    '亲子羽毛球时光最珍贵，孩子追着球跑的样子像只欢快的小鹿，运动让陪伴更有质量。',
    '公司羽毛球赛意外发现同事的隐藏技能，原来财务总监是前省队选手！职场关系在球拍间悄悄升温。',
    '夜场灯光下的羽毛球像流星划过，独自练球的夜晚很治愈，听着球拍破风的声音，烦恼都被抽离了。',
    '退休后重拾羽毛球，膝盖护具和护腕成了新装备，但站在场上的瞬间，又变回那个二十岁的追风少年。',
    '羽毛球是性价比最高的社交货币，约客户打球既能展示活力又不失体面，生意常在球拍交换中谈成。',
    '羽毛球场上的每一次跃起都像在触摸天空，球拍与羽毛球的碰撞声是最动人的节奏，这里让平凡的日子有了飞翔的质感。',
    '从菜鸟到高手，羽毛球见证了我的成长。汗水浸透的T恤、磨破的球鞋，都是热爱最好的勋章。',
    '周末约上三五好友杀两局，笑声和球速一起飙升。这种既能锻炼身体又能增进感情的活动，简直完美！',
    '羽毛球是成年人的快乐跳跳糖——短短一局就能释放压力，多巴胺随着扣杀暴增，下班后的最佳充电方式。',
    '专业教练的指导让我进步神速，原来反手挑球有这么多门道！系统训练后终于能和老爹打得有来有回了。',
    '亲子羽毛球时光最珍贵，孩子追着球跑的样子像只欢快的小鹿，运动让陪伴更有质量。',
    '公司羽毛球赛意外发现同事的隐藏技能，原来财务总监是前省队选手！职场关系在球拍间悄悄升温。',
    '夜场灯光下的羽毛球像流星划过，独自练球的夜晚很治愈，听着球拍破风的声音，烦恼都被抽离了。',
    '退休后重拾羽毛球，膝盖护具和护腕成了新装备，但站在场上的瞬间，又变回那个二十岁的追风少年。',
    '羽毛球是性价比最高的社交货币，约客户打球既能展示活力又不失体面，生意常在球拍交换中谈成。',
    '羽毛球是流动的芭蕾，白色弧线划出优雅轨迹，每一次挥拍都是与地心引力的浪漫对抗。',
    '下班后冲进体育馆，三局下来所有疲惫都被抽干，这种酣畅淋漓的感觉，比咖啡提神十倍！',
    '陪孩子练球时发现，他接球的专注眼神像极了小时候的我，运动基因在亲子互动中悄然传承。',
    '公司团建选择羽毛球赛，平时严肃的老板扣杀时竟会喊‘哇哦’，职场隔阂在笑声中消融。',
    '专业球馆的防滑地胶和智能计分系统，让运动体验升级得像打游戏，连输球都变得有趣起来。',
    '退休后每周固定球局，老球友们互相调侃‘这把老骨头’，但救球时依然能鱼跃扑地。',
    '羽毛球是最公平的社交语言，约客户打球不用刻意寒暄，实力就是最好的破冰话题。',
    '夜场灯光下独自练球，听着羽毛球撞击拍面的脆响，仿佛所有烦恼都被精准击出场外。',
    '从挥拍动作到步法训练，教练的耐心指导让我明白：羽毛球是用脑子打的运动，不是蛮力。',
    '闺蜜失恋约她打球，三局下来她边喘气边笑：‘原来甩掉渣男的感觉，比扣杀还爽！’',
    '社区羽毛球赛让我认识了对门邻居，现在两家常约着‘家庭对抗赛’，运动让邻里更亲密。',
    '出差必带折叠球拍，酒店走廊也能来场‘微运动’，这种随时能开始的快乐太治愈了。',
    '羽毛球是成年人的秘密乐园，当工作压力像重扣杀来，一个漂亮的反手抽击就能化解。',
    '陪老爸打球听他炫耀年轻时的比赛战绩，虽然球技退步，但眼里的光依然像冠军少年。',
    '公司新来的实习生竟是羽毛球高手，两局下来从‘领导好’变成‘老师求带’，职场距离感瞬间消失。',
    '周末亲子羽毛球日，孩子追着球满场跑的样子像只小鹿，运动让陪伴更有质量。',
    '羽毛球是最省钱的快乐，一对球拍加几个球，就能收获整晚的欢笑和汗水。',
    '夜场灯光下的羽毛球像流星划过，独自练球的夜晚很治愈，听着球拍破风的声音，烦恼都被抽离了。',
    '退休后重拾羽毛球，膝盖护具和护腕成了新装备，但站在场上的瞬间，又变回那个二十岁的追风少年。',
    '羽毛球是性价比最高的社交货币，约客户打球既能展示活力又不失体面，生意常在球拍交换中谈成。'
]


def get_my_act():
    resp = http.fetch_my_act()
    # print(resp['records'])
    cc = 0
    for record in resp['records']:
        # print('----', record['id'], record['evaluateStatus'], record['clubId'])
        if record['clubId'] == 10727 and record['evaluateStatus'] == 0:
            write_act_comments(record['id'], comments[cc])
            time.sleep(20)
            cc = cc + 1
            if cc >= len(comments):
                print('end......')
                break


# 使用示例
if __name__ == "__main__":
    # resp = http.fetch_club_finish_events()
    # print(len(resp))

    # club_id = 10727
    # ret = http.fetch_club_credit(club_id)
    # print(ret)

    # 获取活动列表，之后可以根据参加的活动写评价
    # get_my_act()
    # write_act_comments(2563297, '羽毛球场的杀球声就是我的肾上腺素！每次跃起扣杀的瞬间，感觉整个世界都慢了下来，只剩球拍与羽毛球的完美碰撞。')
    admin = db.get_admin_account()
    # print('token', admin.access_token)
    http.set_flash_token(admin.access_token)

    # 获取俱乐部成员信息以及已完成的活动信息，同步发放积分等
    fetch_club_members()
    query_finished_events()

